package com.hb.B_面向对象.I_类型系统

/**
 * kotlin可区分非空（non-null）和可空（nullable）类型
 */
fun main() {
    /**
     * 错误,在kotlin中，这在编译时就会报错，这意味着在kotlin中访问费控类型的变量
     * 将蝾螈不会抛出空指针异常。在kotlin中，我们可以在任何类型后面加上"?"，比如
     * "Int?",实际上Int?=Int or null;通过合理地使用，不仅能够简化很多判空代码
     * 还能够有效的避免空指针异常。
     *
     * 由于null只能被存储在Java的引用类型的变量中，所以在kotlin中基本数据的可空版本都会
     * 使用该类型的包装形式。同样，如果你用基本数据类型作为泛型类的类型参数，kotlin同样会使用
     * 该类型的包装形式。
     */
//    val x:Long=null

    //1. 安全的调用 "?."

    //2. Elvis操作符"?:",相当于是三元运算符
    /**
     * 假设座位上有学生，如果不戴眼镜，眼镜的度数为-1，我们在java中会利用三目运算符
     *
     * 在kotlin中可以使用Elvis操作符或合并运算符
     */

    //3. 非空断言 "!!."
    /**
     *
     */

    //4. 类型的检查，在java中使用instance of,在kotlin中使用is来进行类型的检查

}

class Student {

}

class kot {
    fun getStu() = Student()
//    var stu: Student? = getStu()
//    fun dealStu() {
//        if (stu != null) {
//            println(stu)
//        }
//    }
}